/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.wordpress.salaboy.services;
import bitronix.tm.resource.jdbc.PoolingDataSource;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.drools.SystemEventListenerFactory;
import org.jbpm.task.User;
import org.jbpm.task.service.TaskClient;
import org.jbpm.task.service.TaskService;
import org.jbpm.task.service.TaskServiceSession;
import org.jbpm.task.service.hornetq.HornetQTaskClientConnector;
import org.jbpm.task.service.hornetq.HornetQTaskClientHandler;
import org.jbpm.task.service.hornetq.HornetQTaskServer;
/**
*
* @author salaboy
*/
public class HumanTaskServerService {
private static HumanTaskServerService instance = null;
//private MinaTaskServer server;
private HornetQTaskServer server;
private EntityManagerFactory emf;
private TaskService taskService;
private TaskServiceSession taskSession;
private PoolingDataSource ds1;
private Map<String, TaskClient> currentClients;
private HumanTaskServerService() {
}
public static HumanTaskServerService getInstance() {
if (instance == null) {
instance = new HumanTaskServerService();
}
return instance;
}
public void initTaskServer() {
System.out.println(">>> Starting Human Task Server ...");
ds1 = new PoolingDataSource();
ds1.setUniqueName("jdbc/testDS1");
//ds1.setClassName("com.mysql.jdbc.jdbc2.optional.MysqlXADataSource");
ds1.setClassName("org.h2.jdbcx.JdbcDataSource");
ds1.setMaxPoolSize(5);
ds1.setAllowLocalTransactions(true);
ds1.getDriverProperties().put("user", "root");
ds1.getDriverProperties().put("password", "atcroot");
//ds1.getDriverProperties().put("databaseName", "droolsflow");
//ds1.getDriverProperties().put("serverName", "localhost");
ds1.init();
// Use persistence.xml configuration
emf = Persistence.createEntityManagerFactory("org.jbpm.task");
taskService = new TaskService(emf, SystemEventListenerFactory.getSystemEventListener());
taskSession = taskService.createSession();
User operator = new User("operator");
User driver = new User("control");
User hospital = new User("hospital");
User doctor = new User("doctor");
User firefighter = new User("firefighter");
User garageEmergencyService = new User("garage_emergency_service");
User Administrator = new User("Administrator");
taskSession.addUser(Administrator);
taskSession.addUser(operator);
taskSession.addUser(driver);
taskSession.addUser(hospital);
taskSession.addUser(doctor);
taskSession.addUser(firefighter);
taskSession.addUser(garageEmergencyService);
if (server != null && server.isRunning()) {
System.out.println(">>> Server Already Started");
return;
}
//server = new MinaTaskServer(taskService);
server = new HornetQTaskServer(taskService, 5446);
try {
Thread thread = new Thread( server );
thread.start();
while (!server.isRunning()) {
System.out.print(".");
Thread.sleep(50);
}
} catch (Exception ex) {
Logger.getLogger(HumanTaskServerService.class.getName()).log(Level.SEVERE, null, ex);
System.out.println(" >>> ERROR: Server Not Started: " + ex.getMessage());
}
if (server.isRunning()) {
System.out.println(">>> Human Task Server Started!");
}
}
public void stopTaskServer() {
if (currentClients != null) {
for (String key : currentClients.keySet()) {
System.out.println(">>> Disconnecting Client = " + key);
try {
currentClients.get(key).disconnect();
} catch (Exception ex) {
Logger.getLogger(HumanTaskServerService.class.getName()).log(Level.SEVERE, null, ex);
}
currentClients.remove(key);
}
currentClients = null;
}
System.out.println(">>> Stopping Human Task Server ...");
ds1.close();
taskSession.dispose();
try {
server.stop();
} catch (Exception ex) {
Logger.getLogger(HumanTaskServerService.class.getName()).log(Level.SEVERE, null, ex);
}
server = null;
taskSession = null;
ds1 = null;
System.out.println(">>> Human Task Server Stopped!");
}
public TaskClient initTaskClient() {
TaskClient client = new TaskClient(new HornetQTaskClientConnector("tasksQueue/appclient",
new HornetQTaskClientHandler(SystemEventListenerFactory.getSystemEventListener())));
//boolean connected = client.connect("127.0.0.1", 9123);
boolean connected = client.connect("127.0.0.1", 5446);
int retry = 0;
while (!connected) {
try {
Thread.sleep(2000);
} catch (InterruptedException ex) {
java.util.logging.Logger.getLogger(HumanTaskServerService.class.getName()).log(Level.SEVERE, null, ex);
}
//connected = client.connect("127.0.0.1", 9123);
connected = client.connect("127.0.0.1", 5446);
if (!connected) {
retry++;
}
}
System.out.println("Client (" + "tasksQueue" + ") Connected after " + retry + " retries");
if (currentClients == null) {
currentClients = new ConcurrentHashMap<String, TaskClient>();
}
currentClients.put("tasksQueue", client);
return client;
}
}